// RxJs 使用的是观察者模式，用来编写异步队列和事件处理。
// Observable 可观察的物件
// Subscription 监听Observable
// Operators 纯函数可以处理管道的数据 如 map filter concat reduce 等


import { Observable, interval, take, fromEvent } from "rxjs";

import { map, filter,reduce,find,findIndex } from 'rxjs/operators'

// 使用案例一:
//类似于迭代器 next 发出通知  complete通知完成
const observable = new Observable(subscribe => {
    subscribe.next(1);
    subscribe.next(2);
    subscribe.next(3);
    setTimeout(() => {
        subscribe.next(4);
        subscribe.complete();
    }, 2000);
});

observable.subscribe({
    next: (value) => {
        console.log('subscribe value:', value);
    }
})

// 使用案例二:

const sub = interval(500).pipe(map(v => ({ num: v })), filter(v => (v.num % 2 == 0))).subscribe((e) => {
    console.log(e)
})




// 使用案例三
// Rxjs 也可以处理事件 不过我们在Nestjs 里面就不用操作DOM 了 你如果Angular 或则 Vue 框架看可以使用  fromEvent
const dom = fromEvent(document,'click').pipe(map(e=>e.target))
dom.subscribe((e)=>{
 
})
